export const Client = {
  file: {
    ...window.client.file,
    selectFile: (filter = {}) => {
      return window.client.file.selectFile(filter)
    },
    selectVideo: async () => {
      return Client.file.selectFile({ name: 'Videos', extensions: ['mp4', 'mov'] })
    },
    selectAudio: async () => {
      return Client.file.selectFile({ name: 'Audios', extensions: ['mp3', 'wav', 'flac', 'm4a'] })
    },
    readSubtitleFile: async (filePath) => {
      return Client.file.readFilePath(filePath)
    },
    // 新增方法：选择文件夹/目录
    selectDirectory: async () => {
      return Client.file.selectFileDirectory()
    },
    // 新增方法：选择多个音频文件
    selectMultipleAudio: async () => {
      // 使用Electron的原生对话框API来选择多个文件
      return Client.file.selectAudioFile({ name: 'Audios', extensions: ['mp3', 'wav', 'flac', 'm4a'] })
    },
    // 选择Excel文件 - 使用后端新增的selectExcelFile方法
    selectExcel: async () => {
      return window.client.file.selectExcelFile({
        name: 'Excel Files',
        extensions: ['xlsx', 'xls']
      });
    },
    // 选择多个文件 - 使用后端新增的selectMultipleFiles方法
    selectMultipleFiles: async (options = {}) => {
      return window.client.file.selectMultipleFiles(options);
    },

    // 读取文件缓冲区 - 使用后端新增的readBuffer方法
    readFileBuffer: async (filePath) => {
      return window.client.file.readBuffer(filePath);
    },

    // 获取文件信息 - 使用后端新增的getFileInfo方法
    getFileInfo: async (filePath) => {
      return window.client.file.getFileInfo(filePath);
    },

    // 获取Excel文件信息 - 使用后端新增的getExcelInfo方法
    getExcelInfo: async (filePath) => {
      return window.client.file.getExcelInfo(filePath);
    },
    // 获取视频文件对象
    async getFileObjectFromPath(filePath) {
      try {
        // 如果是本地文件路径，需要处理协议前缀
        if (filePath.startsWith('file://')) {
          filePath = filePath.replace(/^file:\/\//, '');
        }

        // 使用Electron的API获取文件
        const fileData = await window.electron.ipcRenderer.invoke('file/getBuffer', filePath);

        if (!fileData) {
          throw new Error('无法读取文件数据');
        }

        // 创建File对象
        const fileName = filePath.split('/').pop() || filePath.split('\\').pop() || 'video.mp4';

        // 获取文件扩展名
        const extension = fileName.includes('.') ? fileName.split('.').pop().toLowerCase() : '';

        // 获取文件MIME类型
        const fileType = window.client.file.getFileType ?
          await window.client.file.getFileType(extension) :
          getMimeType(extension);

        // 从Buffer创建Blob
        const blob = new Blob([fileData], { type: fileType });

        // 从Blob创建File对象
        return new File([blob], fileName, { type: fileType });
      } catch (err) {
        console.error('从路径获取文件失败:', err);
        throw err;
      }
    },
    // 新增方法：选择多个音频文件
    async saveCaption(captionPath, captionContent) {
      // 使用Electron的原生对话框API来选择多个文件
      return Client.file.saveCaptionFile(captionPath, captionContent)
    },
  },
  app: {
    ...window.client.app
  }
};

// 辅助函数 - 获取MIME类型（如果后端没有提供getFileType方法）
function getMimeType(extension) {
  const mimeTypes = {
    // 视频类型
    'mp4': 'video/mp4',
    'mov': 'video/quicktime',
    'avi': 'video/x-msvideo',
    'mkv': 'video/x-matroska',

    // 音频类型
    'mp3': 'audio/mpeg',
    'wav': 'audio/wav',
    'flac': 'audio/flac',
    'm4a': 'audio/m4a',

    // Excel类型
    'xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
    'xls': 'application/vnd.ms-excel',

    // 文本类型
    'txt': 'text/plain',
    'csv': 'text/csv',

    // 默认类型
    'default': 'application/octet-stream'
  };

  return mimeTypes[extension] || mimeTypes.default;
}
